﻿using BCEntity.MakeStaticPagingComponent.PageTemplate;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace BCData.MakeStaticPagingComponent.PageTemplate
{
    /// <summary>
    /// 页面模板数据处理接口
    /// </summary>
    public interface IPageTemplateData
    {
        /// <summary>
        /// 检查页面模板是否存在
        /// </summary>
        /// <param name="pageUrlName">页面路径名称</param>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <returns></returns>
        bool CheckPageTemplateExists(string pageUrlName, int websiteTemplateId);
        /// <summary>
        /// 检查页面模板是否存在
        /// </summary>
        /// <param name="pageUrlName">页面路径名称</param>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="pageTemplateId">页面模板Id</param>
        /// <returns></returns>
        bool CheckPageTemplateExists(string pageUrlName, int websiteTemplateId, long pageTemplateId);
        /// <summary>
        /// 检查页面模板是否存在
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="pageCode">页面编码</param>
        /// <returns></returns>
        bool CheckPageTemplateExists(int websiteTemplateId, string pageCode);
        /// <summary>
        /// 检查页面模板是否存在
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="pageCode">页面编码</param>
        /// <param name="pageTemplateId">页面模板Id</param>
        /// <returns></returns>
        bool CheckPageTemplateExists(int websiteTemplateId, string pageCode, long pageTemplateId);
        /// <summary>
        /// 检查页面模板是否存在
        /// </summary>
        /// <param name="pageTemplateId">页面模板Id</param>
        /// <returns></returns>
        bool CheckPageTemplateExists(long pageTemplateId);
        /// <summary>
        /// 检查父级页面模板是否存在
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="parentPageCode">父级页面编码</param>
        /// <returns></returns>
        bool CheckParentPageTemplateExists(int websiteTemplateId, string parentPageCode);
        /// <summary>
        /// 检查内容页页面编码是否存在
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="ContentPageCode">内容页页面编码</param>
        /// <returns></returns>
        bool CheckContentPageCodeExists(int websiteTemplateId, string ContentPageCode);
        /// <summary>
        /// 检查页面编码是否存在
        /// </summary>
        /// <param name="pageCode"></param>
        /// <returns></returns>
        bool CheckPageCodeExists(string pageCode);
        /// <summary>
        /// 添加页面模板信息
        /// </summary>
        /// <param name="pageTemplateEntity">页面模板信息</param>
        /// <returns></returns>
        PageTemplateEntity Add(PageTemplateEntity pageTemplateEntity);
        /// <summary>
        /// 更新页面模板信息
        /// </summary>
        /// <param name="pageTemplateEntity">页面模板信息</param>
        /// <returns></returns>
        PageTemplateEntity Update(PageTemplateEntity pageTemplateEntity);
        /// <summary>
        /// 删除页面模板信息
        /// </summary>
        /// <param name="pageTemplateId">页面模板Id</param>
        void Delete(long pageTemplateId);
        /// <summary>
        /// 更新网站模板为已使用
        /// </summary>
        /// <param name="websiteTemplateId">网站模本Id</param>
        /// <returns></returns>
        bool UpdateWebsiteTemplateIsUsed(int websiteTemplateId);
        /// <summary>
        /// 获取页面模板信息
        /// </summary>
        /// <param name="pageCode">页面编码</param>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <returns></returns>
        PageTemplateEntity Get(string pageCode, int websiteTemplateId);

        /// <summary>
        /// 获取页面模板信息
        /// </summary>
        /// <param name="pageTemplateId">页面模板Id</param>
        /// <returns></returns>
        PageTemplateEntity Get(long pageTemplateId);
        /// <summary>
        /// 获取页面模板信息
        /// </summary>
        /// <param name="pageCode">页面编码</param>
        /// <returns></returns>
        PageTemplateEntity GetPageTemplate(string pageCode);
        /// <summary>
        /// 获取页面配置模板信息（分页）
        /// </summary>
        /// <param name="pageName">页面名称</param>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="dataCount">数据总条数</param>
        /// <param name="ascending">排序</param>
        /// <param name="index">当前页码</param>
        /// <param name="size">每页数据条数</param>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> Get(string pageName, int websiteTemplateId, out int dataCount, bool? ascending, int index = 1, int size = 20);
        /// <summary>
        /// 获取所有页面模板信息
        /// </summary>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> Get();
        /// <summary>
        /// 获取某页面模板子级列表
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <param name="parentPageCode">父级页面编码</param>
        /// <returns></returns>
        Task<IEnumerable<PageTemplateEntity>> GetPageTemplateChildren(int websiteTemplateId, string parentPageCode);
        /// <summary>
        /// 获取页面模板信息列表
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> GetList(long websiteTemplateId);
        /// <summary>
        /// 检查网站模板Id是否存在
        /// </summary>
        /// <param name="websiteTemplateId">网站模板Id</param>
        /// <returns></returns>
        bool CheckWebsiteTemplateIdExists(int websiteTemplateId);

        /// <summary>
        /// 获取子级页面模板列表
        /// </summary>
        /// <param name="pageCode">页面编码</param>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> GetSubPageTemplateList(string pageCode);
        /// <summary>
        /// 获取显示在导航栏的子级页面模板列表
        /// </summary>
        /// <param name="PageCode">页面编码</param>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> GetShowNavigationSubPageTemplateList(string pageCode);
        /// <summary>
        /// 获取所有节点
        /// </summary>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> GetTree();
        /// <summary>
        /// 获取页面最高级别
        /// </summary>
        /// <returns></returns>
        int MaxLevel();
        /// <summary>
        /// 查询所有子集
        /// </summary>
        /// <param name="pageCode">页面编码</param>
        /// <returns></returns>
        IEnumerable<PageTemplateEntity> GetAllChild(string pageCode);
        /// <summary>
        /// 获取父级到根级页面url路径
        /// </summary>
        /// <param name="pageCode">页面编码</param>
        /// <returns></returns>
        string GetParentAllPagePath(string pageCode);
    }
}
